package controller

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"go_web/dao/mysql"
	"go_web/logger"
	"go_web/models"
	"go_web/pkg/gen_id"
)

//创建评论
func CommentHandler(ctx *gin.Context) {
	//1.绑定数据到comment结构体上
	var comment models.Comment
	//将前端的参数绑定到comment实例上
	if err := ctx.ShouldBindJSON(&comment); err != nil { //此处是参数有误的情况下会执行
		fmt.Println(err)
		ResponseError(ctx, CodeInvalidParams)
		return
	}
	//2.生成评论id
	commentId, err := gen_id.GetID() //生成唯一的评论id
	//当出错的时候，先记录日志、返回，结束
	if err != nil {
		logger.Error("gen_id.GetID() failed", zap.Error(err))
		ResponseError(ctx, CodeServerBusy)
		return
	}
	//3.获取用户的id
	UserId, err := getCurrentUserID(ctx)
	if err != nil {
		logger.Error("getCurrentUserID() failed", zap.Error(err))
		ResponseError(ctx, CodeNotLogin)
		return
	}
	//生成comment id和用户id
	comment.CommentId = commentId
	comment.AuthId = UserId
	//生成评论详细信息存入数据库中
	if err := mysql.CreateComment(&comment); err != nil {
		logger.Error("CreateComment failed", zap.Error(err))
		ResponseError(ctx, CodeServerBusy)
		return
	}
	ResponseSuccess(ctx, nil)
}

//评论列表
func CommentListHandler(ctx *gin.Context) {
	//获取评论的ID，返回的是一个切片类型
	ids, ok := ctx.GetQueryArray("ids")
	if !ok {
		//直接返回
		ResponseError(ctx, CodeInvalidParams)
		return
	}
	//通过id从数据库中查询出帖子的信息
	posts, err := mysql.GetCommentListByIDs(ids)
	if err != nil {
		ResponseError(ctx, CodeServerBusy)
		return
	}
	ResponseSuccess(ctx, posts)
}
